Подготовка данных.

Веганские рестораны.

veglem <- read_excel("~/cmta_proj/вег1.xlsx")
## readxl works best with a newer version of the tibble package.
## You currently have tibble v1.4.2.
## Falling back to column name repair from tibble <= v1.4.2.
## Message displays once per session.
veglem$text = removeNumbers(veglem$text)
veglem$text = removePunctuation(veglem$text)

text.tmp.veg <- system2("mystem", c("-c", "-l", "-d"), input=veglem$text, stdout=TRUE)
text.lem <- stringr::str_replace_all(text.tmp.veg, "\\{([^}]+?)([?]+)?\\}", "\\1")
text.coded <- NULL
text.df <- cbind(text.coded, text.lem)
veglem <- cbind(veglem, text.df)

veglem <- mutate(veglem, line = 1:nrow(veglem))
veglem <- dplyr::select(veglem, line, type, name_rest, text, text.lem)
veglem$text.lem <- as.character(veglem$text.lem)

veg_long <- veglem %>%
    unnest_tokens(word, text.lem) %>%
    filter(! word %in% stoplist) %>%
    filter(! str_detect(word, "[0-9]+"))

veg.dtm <- veg_long %>%
    dplyr::count(line, word)

names(veg.dtm)
## [1] "line" "word" "n"

Кавказские рестораны.

kavlem <- read_excel("~/cmta_proj/кав1.xlsx")
kavlem$text = removeNumbers(kavlem$text)
kavlem$text = removePunctuation(kavlem$text)


text.tmp.kav <- system2("mystem", c("-c", "-l", "-d"), input=kavlem$text, stdout=TRUE)
text.lem <- stringr::str_replace_all(text.tmp.kav, "\\{([^}]+?)([?]+)?\\}", "\\1")
text.coded <- NULL
text.df <- cbind(text.coded, text.lem)
kavlem <- cbind(kavlem, text.df)

kavlem <- mutate(kavlem, line = 1:nrow(kavlem))
kavlem <- dplyr::select(kavlem, line, type, name_rest, text, text.lem)
kavlem$text.lem <- as.character(kavlem$text.lem)

kav_long <- kavlem %>%
    unnest_tokens(word, text.lem) %>%
    filter(! word %in% stoplist) %>%
    filter(! str_detect(word, "[0-9]+"))

kav.dtm <- kav_long %>%
    dplyr::count(line, word)

names(kav.dtm)
## [1] "line" "word" "n"
rest <- rbind(kavlem, veglem)

Log-likelihood

type.lemmas.or <- bind_rows(kav_long, veg_long) %>% 
  dplyr::count(word, type) %>%
    spread(type, n, fill = 0) %>%
    filter("kav" > 10 | "veg" > 10)
### Создаем функцию для рассчета логарифмической вероятности (log-likelihood: G-squared)

g2 = function(a, b) {
  c = sum(a)
  d = sum(b)
  E1 = c * ((a + b) / (c + d))
  E2 = d * ((a + b) / (c + d))
  return(2*((a*log(a/E1+1e-7)) + (b*log(b/E2+1e-7))))
}
library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:readr':
## 
##     col_factor
ggplot(type.lemmas.or, aes(veg, kav)) +
  geom_jitter(alpha = 0.1, size = 2.5, width = 0.25, height = 0.25) +
  geom_text(aes(label = word), check_overlap = TRUE, vjust = 1.5) +
  geom_abline(color = "red")

type.g2.or <- type.lemmas.or %>% 
    mutate(g2=g2(veg, kav)) %>%
    arrange(desc(g2)) %>%
    mutate(g2 = round(g2, 2))
# Создаем функцию расчета Log odds ratio

logratio <- function(a, b) {
    return(log2((a/sum(a)/(b/sum(b)))))
}
# Рассчитываем Log Ratio

type.lr.or <- type.g2.or %>%
    mutate(logratio = logratio(kav, veg))
type.lr.or %>%
    arrange(abs(logratio))
## # A tibble: 9,010 x 5
##    word           kav   veg    g2  logratio
##    <chr>        <dbl> <dbl> <dbl>     <dbl>
##  1 вкусно         192   170     0 -0.000646
##  2 любить          44    39     0 -0.00219 
##  3 оценка          17    15     0  0.00435 
##  4 правильный       9     8     0 -0.00629 
##  5 день           139   124     0 -0.0115  
##  6 превосходный    16    14     0  0.0164  
##  7 везти            8     7     0  0.0164  
##  8 вместе           8     7     0  0.0164  
##  9 деловой          8     7     0  0.0164  
## 10 неприятный       8     7     0  0.0164  
## # ... with 9,000 more rows
type.lr.or %>%
    filter(veg > 0 & kav > 0) %>%
    group_by(logratio < 0) %>%
    top_n(15, abs(logratio)) %>%
    ungroup()
## # A tibble: 30 x 6
##    word             kav   veg    g2 logratio `logratio < 0`
##    <chr>          <dbl> <dbl> <dbl>    <dbl> <lgl>         
##  1 грузинский       217     2 255.      6.59 FALSE         
##  2 чебурек          178     6 182.      4.71 FALSE         
##  3 вегетарианский     1   101 143.     -6.83 TRUE          
##  4 укроп              1    63  86.2    -6.15 TRUE          
##  5 хачапури          81     4  76.5     4.16 FALSE         
##  6 шашлык            90     7  74.4     3.51 FALSE         
##  7 индийский          1    45  59.7    -5.67 TRUE          
##  8 домашний          68     5  57.3     3.59 FALSE         
##  9 уважаемый          2    42  49.8    -4.57 TRUE          
## 10 живой             54     3  49.5     3.99 FALSE         
## # ... with 20 more rows

Нарисуем график:

type.lr.or %>%
    filter(veg > 0 & kav > 0) %>%
    group_by(logratio < 0) %>%
    top_n(15, abs(logratio)) %>%
    ungroup() %>%
    mutate(word = reorder(word, logratio)) %>%
    ggplot(aes(word, logratio, fill = logratio > 0)) +
    geom_col(show.legend = FALSE) +
    coord_flip() +
    ylab("log odds ratio (kav/veg)") +
    scale_fill_discrete(name = "", labels = c("veg", "kav"))

Collocations

rest <- rbind(kavlem, veglem)
stoplist <- c(stopwords("ru"), "это", "весь", "очень", "ресторан", "спасибо", "отзыв", "день")
pn.skipgrams = rest %>% 
  unnest_tokens(skipgram, text.lem, token = "skip_ngrams", n = 2, k = 3) %>%
    select(type, line, skipgram)
pn.skipfiltered <- pn.skipgrams %>% 
  separate(skipgram, c("word1", "word2"), sep = " ") %>%
  filter(!is.na(word2) & ! is.na(word1)) %>% 
  filter(!word1 %in% stoplist) %>% 
  filter(!word2 %in% stoplist) 
## Warning: Expected 2 pieces. Missing pieces filled with `NA` in 91447 rows
## [1, 6, 11, 16, 21, 26, 31, 36, 41, 46, 51, 56, 61, 66, 71, 76, 81, 86, 91,
## 96, ...].
pn.skipfiltered %>% select(word1, word2) %>% head
##      word1      word2
## 1  бабушка    дедушка
## 2  бабушка   родитель
## 3  дедушка   родитель
## 4  дедушка     ходить
## 5 родитель     ходить
## 6    время чебуречная
pn.skipfreq <- pn.skipfiltered %>% 
  dplyr::count(word1, word2,type, sort = TRUE)
pn.skipfreq
## # A tibble: 108,574 x 4
##    word1       word2       type      n
##    <chr>       <chr>       <chr> <int>
##  1 грузинский  кухня       kav      84
##  2 добрый      ваш         veg      64
##  3 вкусный     еда         veg      52
##  4 добрый      деньбольшой veg      49
##  5 вкусный     еда         kav      45
##  6 деньбольшой ваш         veg      40
##  7 ждать       снова       veg      40
##  8 приятный    атмосфера   veg      40
##  9 вкусный     смузи       veg      37
## 10 еда         вкусный     kav      37
## # ... with 108,564 more rows
pn.unifreq <- rest %>%
    unnest_tokens(word, text.lem) %>%
    filter(!word %in% stoplist) %>%
    dplyr::count(word, sort = TRUE)
pn.unifreq
## # A tibble: 9,007 x 2
##    word         n
##    <chr>    <int>
##  1 вкусный    624
##  2 блюдо      603
##  3 хороший    566
##  4 кухня      491
##  5 место      491
##  6 еда        444
##  7 наш        424
##  8 меню       363
##  9 вкусно     362
## 10 приятный   360
## # ... with 8,997 more rows
pn.freqjoined <- pn.skipfreq %>%
    left_join(pn.unifreq, by = c("word1" = "word"), suffix = c(".xy", ".x")) %>%
    left_join(pn.unifreq, by = c("word2" = "word"), suffix = c(".xy", ".y")) %>%
    mutate(n.y = n) %>% select(-n)

pn.freqjoined
## # A tibble: 108,574 x 6
##    word1       word2       type   n.xy   n.x   n.y
##    <chr>       <chr>       <chr> <int> <int> <int>
##  1 грузинский  кухня       kav      84   219   491
##  2 добрый      ваш         veg      64   167   282
##  3 вкусный     еда         veg      52   624   444
##  4 добрый      деньбольшой veg      49   167    49
##  5 вкусный     еда         kav      45   624   444
##  6 деньбольшой ваш         veg      40    49   282
##  7 ждать       снова       veg      40   252   189
##  8 приятный    атмосфера   veg      40   360   268
##  9 вкусный     смузи       veg      37   624   136
## 10 еда         вкусный     kav      37   444   624
## # ... with 108,564 more rows
logDice <- function(f.xy, f.x, f.y) {
    return(14 + log2( (2 * f.xy) / (f.x + f.y) ))
}
pn.logdice <- pn.freqjoined %>%
    mutate(logDice = logDice(n.xy, n.x, n.y)) %>%
    arrange(-logDice)
pn.logdice
## # A tibble: 108,574 x 7
##    word1        word2      type   n.xy   n.x   n.y logDice
##    <chr>        <chr>      <chr> <int> <int> <int>   <dbl>
##  1 brochettes   de         kav       2     1     2    14.4
##  2 крепость     анатолий   veg       2     1     2    14.4
##  3 светить      ярко       veg       2     1     2    14.4
##  4 тара         уткать     veg       2     2     1    14.4
##  5 шоколодный   панкейка   veg       2     1     2    14.4
##  6 hands        of         veg       2     1     3    14  
##  7 of           our        veg       2     3     1    14  
##  8 of           waitresses veg       2     3     1    14  
##  9 айзек        кэтедрэл   kav       2     2     2    14  
## 10 выкатываться колобок    kav       2     2     2    14  
## # ... with 108,564 more rows
pn.logdice %>%
    filter(n.xy > 50)
## # A tibble: 3 x 7
##   word1      word2 type   n.xy   n.x   n.y logDice
##   <chr>      <chr> <chr> <int> <int> <int>   <dbl>
## 1 добрый     ваш   veg      64   167   282    12.2
## 2 грузинский кухня kav      84   219   491    11.9
## 3 вкусный    еда   veg      52   624   444    10.6
logdice.graph <- pn.logdice %>%
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice.graph
## IGRAPH a726005 UN-- 22 200 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from a726005 (vertex names):
##  [1] вкусный--блюдо   вкусный--блюдо   вкусный--блюдо   вкусный--блюдо  
##  [5] вкусный--хороший вкусный--хороший вкусный--хороший вкусный--хороший
##  [9] блюдо  --хороший блюдо  --хороший блюдо  --хороший блюдо  --хороший
## [13] вкусный--кухня   вкусный--место   вкусный--кухня   вкусный--кухня  
## [17] вкусный--место   вкусный--место   вкусный--место   вкусный--кухня  
## [21] блюдо  --кухня   блюдо  --кухня   блюдо  --место   блюдо  --место  
## [25] блюдо  --место   блюдо  --кухня   блюдо  --кухня   вкусный--еда    
## + ... omitted several edges
ggraph(logdice.graph, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

logdice.graph <- pn.logdice %>%
  filter(!word1 == word2) %>%
  filter(!word1 == "вкусный" & ! word2 == "вкусный") %>%
  filter(!word1 == "хороший" & ! word2 == "хороший") %>%
  filter(!word1 == "блюдо" & ! word2 == "блюдо") %>% 
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice.graph
## IGRAPH b03403d UN-- 22 200 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from b03403d (vertex names):
##  [1] место--кухня  место--кухня  место--кухня  место--кухня  место--еда   
##  [6] место--еда    место--еда    кухня--еда    кухня--еда    кухня--еда   
## [11] место--еда    кухня--наш    кухня--наш    кухня--наш    кухня--наш   
## [16] место--наш    место--наш    еда  --наш    еда  --наш    еда  --наш   
## [21] еда  --наш    место--меню   кухня--меню   кухня--меню   кухня--меню  
## [26] кухня--меню   место--меню   место--меню   кухня--вкусно место--вкусно
## [31] кухня--вкусно место--вкусно место--вкусно место--вкусно кухня--вкусно
## + ... omitted several edges
ggraph(logdice.graph, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

Коллокации с наиболее часто встречающимися словами среди посетителей веганских и кавказских ресторанов: атмосфера,еда, кухня,персонал,обслуживание

atm <-pn.logdice %>%
    filter(word1 == "атмосфера"|word2 == "атмосфера")

среди кавказских и веганских ресторанов

 atm %>% 
filter(word2 == "атмосфера") %>%
dplyr::count(type, word1, n.xy, sort=TRUE) %>%
group_by(type) %>%
slice(1:200)
## # A tibble: 359 x 4
## # Groups:   type [2]
##    type  word1          n.xy     n
##    <chr> <chr>         <int> <int>
##  1 kav   eplace            1     1
##  2 kav   pete              1     1
##  3 kav   белоснежный       1     1
##  4 kav   блюдо             5     1
##  5 kav   бричмул           1     1
##  6 kav   бронироваться     1     1
##  7 kav   великолепный      2     1
##  8 kav   вкус              1     1
##  9 kav   вкусно            3     1
## 10 kav   вкусности         1     1
## # ... with 349 more rows

часто встречающиеся слова со словом “атмосфера” среди отзывов посетителей веганской кухни

 atm %>% 
  filter(type == "veg") %>% 
  filter(word2 == "атмосфера") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 182 x 4
##    type  word1        n.xy     n
##    <chr> <chr>       <int> <int>
##  1 veg   абсолютно       1     1
##  2 veg   анастасия       1     1
##  3 veg   английский      1     1
##  4 veg   аутентичный     1     1
##  5 veg   бизнес          1     1
##  6 veg   блуждать        1     1
##  7 veg   блюдо           7     1
##  8 veg   большой         2     1
##  9 veg   бумажный        1     1
## 10 veg   буха            1     1
## # ... with 172 more rows

часто встречающиеся слова со словом “атмосфера” среди отзывов посетителей кавказской кухни

atm %>% 
  filter(type == "kav") %>% 
  filter(word2 == "атмосфера") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 177 x 4
##    type  word1          n.xy     n
##    <chr> <chr>         <int> <int>
##  1 kav   eplace            1     1
##  2 kav   pete              1     1
##  3 kav   белоснежный       1     1
##  4 kav   блюдо             5     1
##  5 kav   бричмул           1     1
##  6 kav   бронироваться     1     1
##  7 kav   великолепный      2     1
##  8 kav   вкус              1     1
##  9 kav   вкусно            3     1
## 10 kav   вкусности         1     1
## # ... with 167 more rows

co-occurance со словом “атмосфера” среди посетителей веганской кухни

library(igraph)
library(stringr)
library(ggraph)


logdice50.graph <- atm %>%
  filter(type == "veg") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph
## IGRAPH 7f620d6 UN-- 150 200 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from 7f620d6 (vertex names):
##  [1] атмосфера--вкусный  атмосфера--вкусный  атмосфера--блюдо   
##  [4] атмосфера--блюдо    атмосфера--хороший  атмосфера--хороший 
##  [7] атмосфера--место    атмосфера--кухня    атмосфера--кухня   
## [10] атмосфера--место    атмосфера--еда      атмосфера--еда     
## [13] атмосфера--наш      атмосфера--наш      атмосфера--меню    
## [16] атмосфера--меню     атмосфера--вкусно   атмосфера--вкусно  
## [19] атмосфера--приятный атмосфера--приятный
## + ... omitted several edges

co-occurance со словом “атмосфера” среди отзывов посетителей национальных ресторанов

library(igraph)
library(stringr)
library(ggraph)


logdice50.graph1 <- atm %>%
  filter(type == "kav") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph1
## IGRAPH d2982c2 UN-- 153 200 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from d2982c2 (vertex names):
##  [1] атмосфера--вкусный      атмосфера--вкусный     
##  [3] атмосфера--блюдо        атмосфера--блюдо       
##  [5] атмосфера--хороший      атмосфера--хороший     
##  [7] атмосфера--кухня        атмосфера--кухня       
##  [9] атмосфера--место        атмосфера--место       
## [11] атмосфера--еда          атмосфера--еда         
## [13] атмосфера--меню         атмосфера--вкусно      
## + ... omitted several edges

визуализация co-occurance среди слов посетителей веганских ресторанов

ggraph(logdice50.graph, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

#визуализация co-occurance среди слов посетителей национальных ресторанов

ggraph(logdice50.graph1, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

коллокации со словом “цена”

pr <-pn.logdice %>%
    filter(word1 == "цена"|word2 == "цена")

среди посетителей национальных и веганских ресторанов

 pr %>% 
  filter(word2 == "цена") %>%
  dplyr::count(type, word1, n.xy, sort=TRUE) %>%
group_by(type) %>%
slice(1:200)
## # A tibble: 388 x 4
## # Groups:   type [2]
##    type  word1         n.xy     n
##    <chr> <chr>        <int> <int>
##  1 kav   komendantsky     1     1
##  2 kav   алкоголь         1     1
##  3 kav   армянский        1     1
##  4 kav   атмосфера        1     1
##  5 kav   бахрома          1     1
##  6 kav   блюдо            1     1
##  7 kav   божественный     1     1
##  8 kav   большой          3     1
##  9 kav   быстро           2     1
## 10 kav   ваш              1     1
## # ... with 378 more rows
pr %>% 
  filter(type == "veg") %>% 
  filter(word2 == "цена") %>%
  dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 188 x 4
##    type  word1       n.xy     n
##    <chr> <chr>      <int> <int>
##  1 veg   brown          1     1
##  2 veg   james          1     1
##  3 veg   v              1     1
##  4 veg   адекватный     4     1
##  5 veg   английский     1     1
##  6 veg   атмосфера      1     1
##  7 veg   банкет         1     1
##  8 veg   батончик       1     1
##  9 veg   безвкусный     1     1
## 10 veg   белый          1     1
## # ... with 178 more rows
 pr %>% 
  filter(type == "kav") %>% 
  filter(word2 == "цена") %>%
  dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 200 x 4
##    type  word1         n.xy     n
##    <chr> <chr>        <int> <int>
##  1 kav   komendantsky     1     1
##  2 kav   алкоголь         1     1
##  3 kav   армянский        1     1
##  4 kav   атмосфера        1     1
##  5 kav   бахрома          1     1
##  6 kav   блюдо            1     1
##  7 kav   божественный     1     1
##  8 kav   большой          3     1
##  9 kav   быстро           2     1
## 10 kav   ваш              1     1
## # ... with 190 more rows
logdice50.graph2 <- pr %>%
  filter(type == "veg") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph2
## IGRAPH a6ae764 UN-- 164 200 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from a6ae764 (vertex names):
##  [1] вкусный--цена         вкусный--цена         цена   --блюдо       
##  [4] цена   --блюдо        цена   --хороший      цена   --хороший     
##  [7] цена   --кухня        цена   --место        цена   --место       
## [10] цена   --еда          цена   --еда          цена   --вкусно      
## [13] цена   --вкусно       цена   --приятный     цена   --приятный    
## [16] цена   --обслуживание цена   --обслуживание цена   --официант    
## [19] цена   --гость        цена   --понравиться  цена   --понравиться 
## + ... omitted several edges
logdice50.graph3 <- pr %>%
  filter(type == "kav") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph3
## IGRAPH c39147c UN-- 160 200 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from c39147c (vertex names):
##  [1] вкусный--цена         цена   --блюдо        цена   --блюдо       
##  [4] цена   --хороший      цена   --хороший      цена   --кухня       
##  [7] цена   --кухня        цена   --еда          цена   --еда         
## [10] цена   --наш          цена   --меню         цена   --вкусно      
## [13] цена   --приятный     цена   --приятный     цена   --обслуживание
## [16] цена   --обслуживание цена   --официант     цена   --гость       
## [19] цена   --понравиться  цена   --понравиться  цена   --персонал    
## + ... omitted several edges

визуализация co-occurance слов среди посетителей веганских ресторанов

ggraph(logdice50.graph2, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

#визуализация co-occurance слов среди посетителей национальных ресторанов

ggraph(logdice50.graph3, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

коллокации со словом “обслуживание”

serv <- pn.logdice %>%
    filter(word1 == "обслуживане"|word2 == "обслуживание")
serv %>% 
  filter(word2 == "обслуживание") %>%
  dplyr::count(type, word1, n.xy, sort=TRUE) %>%
group_by(type) %>%
slice(1:200)
## # A tibble: 394 x 4
## # Groups:   type [2]
##    type  word1              n.xy     n
##    <chr> <chr>             <int> <int>
##  1 kav   chebureki             1     1
##  2 kav   hachapuri             1     1
##  3 kav   kavkaz                1     1
##  4 kav   luigolприятно         1     1
##  5 kav   аничковбридж          1     1
##  6 kav   ассортимент           1     1
##  7 kav   атмосфера             7     1
##  8 kav   бар                   1     1
##  9 kav   баранина              2     1
## 10 kav   барместоположение     1     1
## # ... with 384 more rows
serv%>% 
  filter(type == "veg") %>% 
  filter(word2 == "обслуживание") %>%
  dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 194 x 4
##    type  word1            n.xy     n
##    <chr> <chr>           <int> <int>
##  1 veg   адекватный          1     1
##  2 veg   аккуратно           1     1
##  3 veg   акция               1     1
##  4 veg   александр           2     1
##  5 veg   анастасия           1     1
##  6 veg   атмосфера           9     1
##  7 veg   бар                 1     1
##  8 veg   безукоризненный     1     1
##  9 veg   бизнес              2     1
## 10 veg   блюдо               4     1
## # ... with 184 more rows
serv %>% 
  filter(type == "kav") %>% 
  filter(word2 == "обслуживание") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 200 x 4
##    type  word1              n.xy     n
##    <chr> <chr>             <int> <int>
##  1 kav   chebureki             1     1
##  2 kav   hachapuri             1     1
##  3 kav   kavkaz                1     1
##  4 kav   luigolприятно         1     1
##  5 kav   аничковбридж          1     1
##  6 kav   ассортимент           1     1
##  7 kav   атмосфера             7     1
##  8 kav   бар                   1     1
##  9 kav   баранина              2     1
## 10 kav   барместоположение     1     1
## # ... with 190 more rows
logdice50.graph4 <- serv %>%
  filter(type == "veg") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph4
## IGRAPH d3d33db UN-- 195 194 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from d3d33db (vertex names):
##  [1] вкусный    --обслуживание блюдо      --обслуживание
##  [3] хороший    --обслуживание кухня      --обслуживание
##  [5] место      --обслуживание еда        --обслуживание
##  [7] наш        --обслуживание меню       --обслуживание
##  [9] вкусно     --обслуживание приятный   --обслуживание
## [11] официант   --обслуживание понравиться--обслуживание
## [13] персонал   --обслуживание ваш        --обслуживание
## + ... omitted several edges
logdice50.graph5 <- serv %>%
  filter(type == "kav") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph5
## IGRAPH 073f763 UN-- 201 200 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from 073f763 (vertex names):
##  [1] вкусный    --обслуживание блюдо      --обслуживание
##  [3] хороший    --обслуживание кухня      --обслуживание
##  [5] место      --обслуживание еда        --обслуживание
##  [7] наш        --обслуживание меню       --обслуживание
##  [9] вкусно     --обслуживание приятный   --обслуживание
## [11] официант   --обслуживание гость      --обслуживание
## [13] понравиться--обслуживание персонал   --обслуживание
## + ... omitted several edges
ggraph(logdice50.graph4, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

ggraph(logdice50.graph5, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

коллокации со словом “еда”

fo <-pn.logdice %>%
    filter(word1 == "еда"|word2 == "еда")

среди посетителей национальных и веганских ресторанов

fo %>% 
  filter(word2 == "еда") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
group_by(type) %>%
slice(1:200)
## # A tibble: 400 x 4
## # Groups:   type [2]
##    type  word1         n.xy     n
##    <chr> <chr>        <int> <int>
##  1 kav   attitudy         1     1
##  2 kav   coolyour         1     1
##  3 kav   kavkaz           1     1
##  4 kav   pete             1     1
##  5 kav   st               1     1
##  6 kav   аккуратно        1     1
##  7 kav   аничковбридж     1     1
##  8 kav   армянский        1     1
##  9 kav   арсеночень       1     1
## 10 kav   атмосфера        4     1
## # ... with 390 more rows

среди посетителей веганских ресторанов

 fo %>% 
  filter(type == "veg") %>% 
  filter(word2 == "еда") %>%
  dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 200 x 4
##    type  word1              n.xy     n
##    <chr> <chr>             <int> <int>
##  1 veg   botanika              1     1
##  2 veg   google                1     1
##  3 veg   indien                1     1
##  4 veg   pannacotta            1     1
##  5 veg   абсолютно             1     1
##  6 veg   акция                 1     1
##  7 veg   аппетитный            1     1
##  8 veg   атмосфера            10     1
##  9 veg   атмосферачудесный     1     1
## 10 veg   аутентичный           1     1
## # ... with 190 more rows

среди посетителей национальных ресторанов

fo %>% 
  filter(type == "kav") %>% 
  filter(word2 == "еда") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 200 x 4
##    type  word1         n.xy     n
##    <chr> <chr>        <int> <int>
##  1 kav   attitudy         1     1
##  2 kav   coolyour         1     1
##  3 kav   kavkaz           1     1
##  4 kav   pete             1     1
##  5 kav   st               1     1
##  6 kav   аккуратно        1     1
##  7 kav   аничковбридж     1     1
##  8 kav   армянский        1     1
##  9 kav   арсеночень       1     1
## 10 kav   атмосфера        4     1
## # ... with 190 more rows
logdice50.graph6 <- fo %>%
  filter(type == "veg") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph6
## IGRAPH c99278c UN-- 139 200 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from c99278c (vertex names):
##  [1] вкусный--еда          вкусный--еда          еда    --блюдо       
##  [4] еда    --хороший      еда    --хороший      еда    --место       
##  [7] еда    --место        еда    --кухня        еда    --кухня       
## [10] еда    --наш          еда    --наш          еда    --меню        
## [13] еда    --меню         еда    --вкусно       еда    --приятный    
## [16] еда    --приятный     еда    --обслуживание еда    --обслуживание
## [19] еда    --официант     еда    --официант     еда    --понравиться 
## + ... omitted several edges
logdice50.graph7 <- fo %>%
  filter(type == "kav") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph7
## IGRAPH 9cf8607 UN-- 141 200 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from 9cf8607 (vertex names):
##  [1] вкусный--еда          вкусный--еда          еда    --блюдо       
##  [4] еда    --хороший      еда    --хороший      еда    --место       
##  [7] еда    --кухня        еда    --место        еда    --наш         
## [10] еда    --наш          еда    --меню         еда    --меню        
## [13] еда    --вкусно       еда    --вкусно       еда    --приятный    
## [16] еда    --приятный     еда    --обслуживание еда    --обслуживание
## [19] еда    --официант     еда    --официант     еда    --гость       
## + ... omitted several edges
ggraph(logdice50.graph6, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

ggraph(logdice50.graph7, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

коллокации со словом“полезный” среди отзывов посетителей веганских и национальнх ресторанов

ts <- pn.logdice %>%
    filter(word1 == "полезный"|word2 == "полезный")

среди отзывов посетителей веганских и национальных ресторанов

 ts %>% 
  filter(word2 == "полезный") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
group_by(type) %>%
slice(1:200)
## # A tibble: 68 x 4
## # Groups:   type [2]
##    type  word1        n.xy     n
##    <chr> <chr>       <int> <int>
##  1 kav   вкусный         2     1
##  2 kav   влюблять        1     1
##  3 kav   поесть          1     1
##  4 kav   самый           1     1
##  5 veg   блюдо           1     1
##  6 veg   большинство     1     1
##  7 veg   большой         2     1
##  8 veg   вариант         1     1
##  9 veg   ваш             1     1
## 10 veg   взять           1     1
## # ... with 58 more rows

среди отзывов веганских ресторанов

 ts %>% 
  filter(type == "veg") %>% 
  filter(word2 == "полезный") %>%
  dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 64 x 4
##    type  word1           n.xy     n
##    <chr> <chr>          <int> <int>
##  1 veg   блюдо              1     1
##  2 veg   большинство        1     1
##  3 veg   большой            2     1
##  4 veg   вариант            1     1
##  5 veg   ваш                1     1
##  6 veg   взять              1     1
##  7 veg   вкусно             4     1
##  8 veg   вкусный           14     1
##  9 veg   вкусняшекочень     1     1
## 10 veg   выбор              4     1
## # ... with 54 more rows

среди отзывов посетителей национальных ресторанов

 ts %>% 
  filter(type == "kav") %>% 
  filter(word2 == "полезный") %>%
  dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 4 x 4
##   type  word1     n.xy     n
##   <chr> <chr>    <int> <int>
## 1 kav   вкусный      2     1
## 2 kav   влюблять     1     1
## 3 kav   поесть       1     1
## 4 kav   самый        1     1
logdice50.graph10 <- ts %>%
  filter(type == "veg") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph10
## IGRAPH 3f2758e UN-- 129 139 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from 3f2758e (vertex names):
##  [1] вкусный --полезный     вкусный --полезный     полезный--блюдо       
##  [4] полезный--блюдо        полезный--хороший      полезный--место       
##  [7] полезный--кухня        полезный--место        полезный--еда         
## [10] полезный--меню         полезный--меню         полезный--вкусно      
## [13] полезный--вкусно       полезный--приятный     полезный--обслуживание
## [16] полезный--ваш          полезный--атмосфера    полезный--большой     
## [19] полезный--время        полезный--рад          полезный--рад         
## + ... omitted several edges
logdice50.graph11 <- ts%>%
  filter(type == "kav") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph11
## IGRAPH 91c2449 UN-- 9 8 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from 91c2449 (vertex names):
## [1] вкусный --полезный          самый   --полезный         
## [3] поесть  --полезный          полезный--овощ             
## [5] полезный--деньги            полезный--разумный         
## [7] полезный--влюблять          полезный--собралпонравиться
ggraph(logdice50.graph10, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

ggraph(logdice50.graph11, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

Коллокации со словом “настоящий”

nat <- pn.logdice %>%
    filter(word1 == "настоящий"|word2 == "настоящий")

среди отзывов посетителей веганских и национальных ресторанов

 nat %>% 
  filter(word2 == "настоящий") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
group_by(type) %>%
slice(1:200)
## # A tibble: 92 x 4
## # Groups:   type [2]
##    type  word1        n.xy     n
##    <chr> <chr>       <int> <int>
##  1 kav   аромат          1     1
##  2 kav   атмосферный     1     1
##  3 kav   аутентичный     1     1
##  4 kav   банкет          1     1
##  5 kav   боровик         1     1
##  6 kav   вечер           1     1
##  7 kav   винный          1     1
##  8 kav   вкусно          1     1
##  9 kav   вкусный         1     1
## 10 kav   вроде           1     1
## # ... with 82 more rows

среди отзывов веганских ресторанов

 nat%>% 
  filter(type == "veg") %>% 
  filter(word2 == "настоящий") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 29 x 4
##    type  word1     n.xy     n
##    <chr> <chr>    <int> <int>
##  1 veg   блюдо        1     1
##  2 veg   броня        1     1
##  3 veg   вино         1     1
##  4 veg   вкусный      1     1
##  5 veg   вызывать     1     1
##  6 veg   диапазон     1     1
##  7 veg   еда          1     1
##  8 veg   жалеть       1     1
##  9 veg   именно       1     1
## 10 veg   интерес      1     1
## # ... with 19 more rows

среди отзывов посетителей национальных ресторанов

nat %>% 
  filter(type == "kav") %>% 
  filter(word2 == "настоящий") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 63 x 4
##    type  word1        n.xy     n
##    <chr> <chr>       <int> <int>
##  1 kav   аромат          1     1
##  2 kav   атмосферный     1     1
##  3 kav   аутентичный     1     1
##  4 kav   банкет          1     1
##  5 kav   боровик         1     1
##  6 kav   вечер           1     1
##  7 kav   винный          1     1
##  8 kav   вкусно          1     1
##  9 kav   вкусный         1     1
## 10 kav   вроде           1     1
## # ... with 53 more rows
logdice50.graph12 <- nat %>%
  filter(type == "veg") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph12
## IGRAPH e640b24 UN-- 62 64 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from e640b24 (vertex names):
##  [1] вкусный  --настоящий вкусный  --настоящий настоящий--блюдо    
##  [4] настоящий--блюдо     настоящий--еда       настоящий--меню     
##  [7] настоящий--официант  настоящий--который   настоящий--большой  
## [10] настоящий--рад       настоящий--свой      настоящий--свой     
## [13] настоящий--самый     настоящий--выбор     настоящий--вино     
## [16] настоящий--столик    настоящий--смузи     настоящий--город    
## [19] настоящий--подача    настоящий--первый    настоящий--свежий   
## + ... omitted several edges
logdice50.graph13 <- nat%>%
  filter(type == "kav") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph13
## IGRAPH 8eb8997 UN-- 140 144 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from 8eb8997 (vertex names):
##  [1] настоящий--вкусный    настоящий--вкусный    настоящий--кухня     
##  [4] настоящий--место      настоящий--еда        настоящий--наш       
##  [7] настоящий--вкусно     настоящий--приятный   настоящий--гость     
## [10] настоящий--отличный   настоящий--отличный   настоящий--заведение 
## [13] настоящий--время      настоящий--интерьер   настоящий--грузинский
## [16] настоящий--заказывать настоящий--мочь       настоящий--чебурек   
## [19] настоящий--посещать   настоящий--друг       настоящий--самый     
## + ... omitted several edges
ggraph(logdice50.graph12, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

ggraph(logdice50.graph13, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

Коллокации со словом “соотношение” среди отзывов посетителей веганских и национальных ресторанов

en <- pn.logdice %>%
    filter(word1 == "соотношение"|word2 == "соотношение")

среди отзывов посетителей веганских и национальных ресторанов

 en %>% 
  filter(word2 == "соотношение") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
group_by(type) %>%
slice(1:200)
## # A tibble: 49 x 4
## # Groups:   type [2]
##    type  word1                  n.xy     n
##    <chr> <chr>                 <int> <int>
##  1 kav   блестящий                 1     1
##  2 kav   ваш                       1     1
##  3 kav   вкусный                   1     1
##  4 kav   восхитительноотличный     1     1
##  5 kav   гинза                     1     1
##  6 kav   город                     1     1
##  7 kav   еда                       3     1
##  8 kav   заказывать                1     1
##  9 kav   изыск                     1     1
## 10 kav   невероятно                1     1
## # ... with 39 more rows

среди отзывов веганских ресторанов

 en %>% 
  filter(type == "veg") %>% 
  filter(word2 == "соотношение") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 25 x 4
##    type  word1       n.xy     n
##    <chr> <chr>      <int> <int>
##  1 veg   английский     1     1
##  2 veg   атмосфера      1     1
##  3 veg   блюдо          1     1
##  4 veg   вкусно         1     1
##  5 veg   вкусный        2     1
##  6 veg   интересный     1     1
##  7 veg   команда        1     1
##  8 veg   кухня          2     1
##  9 veg   наш            1     1
## 10 veg   обед           1     1
## # ... with 15 more rows

среди отзывов посетителей национальных ресторанов

en %>% 
  filter(type == "kav") %>% 
  filter(word2 == "соотношение") %>%
 dplyr::count(type, word1, n.xy, sort=TRUE) %>%
slice(1:200)
## # A tibble: 24 x 4
##    type  word1                  n.xy     n
##    <chr> <chr>                 <int> <int>
##  1 kav   блестящий                 1     1
##  2 kav   ваш                       1     1
##  3 kav   вкусный                   1     1
##  4 kav   восхитительноотличный     1     1
##  5 kav   гинза                     1     1
##  6 kav   город                     1     1
##  7 kav   еда                       3     1
##  8 kav   заказывать                1     1
##  9 kav   изыск                     1     1
## 10 kav   невероятно                1     1
## # ... with 14 more rows
logdice50.graph14 <- en %>%
  filter(type == "veg") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph14
## IGRAPH fa7eba8 UN-- 36 38 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from fa7eba8 (vertex names):
##  [1] вкусный    --соотношение блюдо      --соотношение
##  [3] хороший    --соотношение хороший    --соотношение
##  [5] соотношение--кухня       соотношение--наш        
##  [7] соотношение--вкусно      соотношение--приятный   
##  [9] соотношение--атмосфера   соотношение--отличный   
## [11] соотношение--цена        соотношение--рад        
## [13] соотношение--приятно     соотношение--приходить  
## + ... omitted several edges
logdice50.graph15 <- en %>%
  filter(type == "kav") %>% 
  filter(!word1 == word2) %>%
  filter(!str_detect(word1, "[0-9,.]+")) %>%
  filter(!str_detect(word2, "[0-9,.]+")) %>%
  arrange(desc(n.x + n.y)) %>%
  slice(1:200) %>%
  graph_from_data_frame(directed = FALSE)
logdice50.graph15
## IGRAPH 11fef54 UN-- 37 36 -- 
## + attr: name (v/c), type (e/c), n.xy (e/n), n.x (e/n), n.y (e/n),
## | logDice (e/n)
## + edges from 11fef54 (vertex names):
##  [1] вкусный     --соотношение   хороший     --соотношение  
##  [3] еда         --соотношение   приятный    --соотношение  
##  [5] обслуживание--соотношение   ваш         --соотношение  
##  [7] отличный    --соотношение   соотношение --цена         
##  [9] соотношение --рекомендовать соотношение --заказывать   
## [11] соотношение --приносить     соотношение --приходить    
## [13] соотношение --прекрасный    соотношение --столик       
## + ... omitted several edges
ggraph(logdice50.graph14, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

ggraph(logdice50.graph15, layout = "fr") +
  geom_edge_link(aes(edge_alpha = logDice), show.legend = FALSE) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_label(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()